Audioデータをクラウドに送ってみました。 コスト計算
1 はじめに
CX事業本部の平内(SIN)です。
ここまで、エッジ側のAudioデータをクラウドへ送信する要領をいくつか試してみました。
MQTTでIoT Coreを経由するものや、Kinesisに直接送るもの、また、データをJSON形式に変換したり、バイナリ形式のまま送るものなど、試してみました。
Audioデータをクラウドに送ってみました。 MQTT + Amazon Kinesis Data Firehose + S3 (JSON)
Audioデータをクラウドに送ってみました。 Amazon Kinesis Data Firehose + S3 (JSON)
Audioデータをクラウドに送ってみました。 Amazon Kinesis Data Streams + Amazon Kinesis Data Firehose + S3 (JSON)
Audioデータをクラウドに送ってみました。 Amazon Kinesis Data Streams + Amazon Kinesis Data Firehose + S3 (バイナリ)
Audioデータをクラウドに送ってみました。 MQTT(basic ingest) + Amazon Kinesis Data Streams + Amazon Kinesis Data Firehose + S3 (バイナリ)
条件によって色々変わると思うので、今回は、ちょっと雑になってしまってますが、色々仮置きして、それぞれのコストを確認してみました。
2 計算の基準
計算するためには、いくつか基準を決める必要がありまが、今回、以下を基準としました。
(1) 対象
計算してみたのは、Audioデータをクラウドへ送る部分のAWS利用料です。通信料金や、データストア及び、データを利用する部分(リアルタイムでのデータ確認など)につては、対象としていません。
(2) 価格
サービスの料金は、2021/04/25現在、AWSの公式ページに記載されている、東京リージョンのものを使用しました。(無料枠については考慮されていません)
AWS IoT Core 料金
Amazon Kinesis Data Streams の料金
Amazon Kinesis Data Firehose 料金
(3) データ量
Audioデータは、8KHz/16bit 1chのデータを、1秒毎に送信する事としました。JOSNに変換した場合、ある程度増えるということで、サイズは下記のとおりとしています。
- バイナリ型式 16,000 (byte/sec)
- JSON形式 22,000 (byte/sec)
(4) 期間
使用する期間は、1ヶ月(30日)としました。
(5) デバイス数
デバイス数は、1台で計算しました。
3 AWS IoT Core
(1) 接続料金
接続料金は、デバイスが接続した時間で計算されます。
- 接続時間(分) = 60 分/時間 x 24 時間/日 x 30 日 = 43,200
- 料金(USD) = 43,200 x 0.096 / 1,000,000 = 0.0041472
(2) AWS IoT Core への送信料金
5KByte単位のメッセージ件数で計算されます。(Basic Ingestでは不要となります)
JSONの場合、1件、約22Kbyteなので、5件/秒となります
- メッセージ数(件): 5 件のメッセージ/秒 * 60/分 * 60/時 x 24時間/日 x 30日 = 12,960,000
- 料金(USD): 12,960,000 件のメッセージ x 1.2 USD/1,000,000 メッセージ = 15.552
バイナリ 場合、1件、約16Kbyteなので、4件/1秒となります
- メッセージ数(件): 4 件のメッセージ/秒 * 60/分 * 60/時 x 24時間/日 x 30日 = 10,368,000
- 料金(USD): 10,368,000 件のメッセージ x 1.2 USD/1,000,000 メッセージ = 12.4416
Subscribeしているものが、無いので、「デバイスへの配信料金」は、計算してません。
(3) ルール(トリガー)
5KByte単位のメッセージ件数で計算されます。送信メッセージ数と同じ件数で計算しています。
JSONの場合、1件、約22Kbyteなので、5件/秒となります
- メッセージ数(件): 5 件のメッセージ/秒 * 60/分 * 60/時 x 24時間/日 x 30日 = 12.960,000
- 料金(USD): 12,960,000 件のメッセージ x 0.18 USD/1,000,000 メッセージ = 2.3328
バイナリ 場合、1件、約16Kbyteなので、4件/1秒となります
- メッセージ数(件): 4 件のメッセージ/秒 * 60/分 * 60/時 x 24時間/日 x 30日 = 10,368,000
- 料金(USD): 10,368,000 件のメッセージ x 0.18 USD/1,000,000 メッセージ = 1.86624
(4) ルール(アクション)
5KByte単位のメッセージ件数で計算されます。アクションは、実行されたアクションの数分必要ですが、下記は、1アクション分です。
JSONの場合、1件、約22Kbyteなので、5件/秒となります
- メッセージ数(件): 5 件のメッセージ/秒 * 60/分 * 60/時 x 24時間/日 x 30日 = 12.960,000
- 料金(USD): 12,960,000 件のメッセージ x 0.18 USD/1,000,000 メッセージ = 2.3328
バイナリ 場合、1件、約16Kbyteなので、4件/1秒となります
- メッセージ数(件): 4 件のメッセージ/秒 * 60/分 * 60/時 x 24時間/日 x 30日 = 10,368,000
- 料金(USD): 10,368,000 件のメッセージ x 0.18 USD/1,000,000 メッセージ = 1.86624
4 Amazon Kinesis Data Streams
(1) シャード料金
1シャードは 1MB/秒、または 1,000 レコード/秒の取り込み、 2 MB/秒のデータ出力であり。今回の要件では、1シャードで充分です。
- 使用時間(時): 1(シャドウ) * 24時間/日 x 30日 = 720
- 料金(USD): 720(時) x 0.0195 USD/時 = 14.04
(2) PUTペイロードユニット (25 KB)
レコード単位のデータ量は、JSON形式でも25KByte未満なので、PUTペイロードユニット数は1で計算しています。
- レコード数(件/月)1 * 60/分 * 60/時 x 24時間/日 x 30日 = 2,592,000
- ペイロードユニット数(件/月)1 * 2,592,000 = 2,592,000
- 料金(USD) 2,592,000件 x 0.0215 USD/1,000,000 メッセージ = 0.0557
データの保存期間延長や、拡張ファンアウトは、計上していません。
5 Amazon Kinesis Data Firehose
1レコードのサイズは、直近の5KBの倍数となります。
JSONの場合、1件、約22Kbyteなので、25KByteとなります
- 取り込まれたデータ (GB/秒) = (1レコード/秒 * 25KB/レコード) / 1,048,576 KB/GB = 0.00002384186 GB/秒
- 取り込まれたデータ (GB/月) = 30日/月 * 86,400秒/日 * 0.00002384186 GB/秒 = 61.798 GB/月
- 月額料金(USD) = 61.798 GB * 0.036 USD/GB = 2.225
バイナリ 場合、1件、約16Kbyteなので、20KByteとなります
- 取り込まれたデータ (GB/秒) = (1レコード/秒 * 20KB/レコード) / 1,048,576 KB/GB = 0.00000190 GB/秒
- 取り込まれたデータ (GB/月) = 30日/月 * 86,400秒/日 * 0.00000190 GB/秒 = 49.438476 GB/月
- 月額料金(USD) = 49.438476 GB * 0.036 USD/GB = 1.78
6 構成ごとの料金
4つの例を元に集計してみました。赤い点線内のサービスのみが対象です。
- (例1) MQTT -> Amazon Kinesis Data Firehose
- (例2) Amazon Kinesis Data Firehose
- (例3) Amazon Kinesis Data Firehose -> Amazon Kinesis Data Firehose
*(例4)MQTT(Basic Ingest) -> Amazon Kinesis Data Streams -> Amazon Kinesis Data Firehose
1台のデバイスで1ヶ月間、バイナリ形式で送信した場合のコストです。
7 最後に
送信部分だけのコストですが、組み合わせによっては、桁数が変わって来ることが分かります。大量のデバイス、長期間となると、どのようなサービスを組み合わせるかは、結構、重要な問題かも知れません。
なお、台数が増えた場合、シャード数の計算などが必要なため、単純に掛ければ良いという訳では無い事をご了承ください。